﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Novapangeia.Dominio;
using Novapangeia.RepositorioNHibernate;
using SharpArch.Data.NHibernate;

namespace Novapangeia.Negocio
{
    public class GerenciadorEstoque
    {

        public static void fabricarArmas(Usuario u, int lancas, int espadas, int arcos) {
            CustoConstrução custoLanca = CustoConstrução.CustoRelativo(Constantes.CUSTOFABRICARLANCA, lancas);
            CustoConstrução custoEspada = CustoConstrução.CustoRelativo(Constantes.CUSTOFABRICARESPADA, espadas);
            CustoConstrução custoArco = CustoConstrução.CustoRelativo(Constantes.CUSTOFABRICARARCO, arcos);
            
            if (u.PodePagar(custoLanca)) {
                u.DebitarRecursos(custoLanca);
                u.recursos.Lancas += lancas;
            }
            if (u.PodePagar(custoEspada))
            {
                u.DebitarRecursos(custoEspada);
                u.recursos.Espadas += espadas;
            }
            if (u.PodePagar(custoArco))
            {
                u.DebitarRecursos(custoArco);
                u.recursos.Arcos += arcos;
            }

            AtualizarEstoques(u.recursos);
        }

        public static void AtualizarEstoques(Reservas estoque)
        {
            using (UnitOfWork.Start())
            {
                RepositorioEstoque repositorioEstoque = new RepositorioEstoque();
                repositorioEstoque.SaveOrUpdate(estoque);
            }
        }

        public static void GerarRecursos()
        {
            RepositorioEstoque repositorioEstoque = new RepositorioEstoque();
            repositorioEstoque.GerarRecursos();
        }

        public static bool MadeiraCheia(Usuario usuario) 
        {
            return usuario.recursos.Madeira >= usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static bool ComidaCheia(Usuario usuario) 
        {
            return usuario.recursos.Comida >= usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static bool MinerioCheio(Usuario usuario) 
        {
            return usuario.recursos.Minerio >= usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static bool OuroCheio(Usuario usuario)
        {
            return usuario.recursos.Ouro >= usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static int CapacidadeMadeira(Usuario usuario)
        {
            return usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static int CapacidadeComida(Usuario usuario)
        {
            return usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static int CapacidadeMinerio(Usuario usuario)
        {
            return usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }

        public static int CapacidadeOuro(Usuario usuario)
        {
            return usuario.construcoes.Armazem * Constantes.CAPACIDADEARMAZEM;
        }
    }
}
